package Moteur;
/**
 * Classe qui repr�sente une case
 */
public class Case
{

	/* private boolean m_EstMinee;
	 * private boolean m_EstMarquee;
	 * public int NombreMineAdjacente = -1;
	 * private boolean m_EstCliquee;
	 */

	/**
	 * Constructeur de la classe Case    
	 * @param estMinee Indique si la case doit �tre min�e ou non
	 */
	public Case(boolean estMinee)
	{
		this.m_EstMinee = estMinee;
		this.m_EstMarquee = false;
	}

	/**
	 * Place une mine, dans le cas o� toutes les mines n'ont pas �t� plac�es du premier coup
	 */
	public void placeMine() { this.m_EstMinee = true; }
	/**
	 * Savoir si la case est min��e
	 * @return Retourne vrai ou faux, en fonction de
	 */
	public boolean getEstMinee() { return this.m_EstMinee; }
	private boolean m_EstMinee;

	/**
	 * Permet de savoir si la case a �t� cliqu�e
	 * @return Retourne l'�tat de la case
	 */
	public boolean getClique() { return this.m_EstCliquee; }
	
	/**
	 * Reinitialise la case, utile pour refaire le même jeu
	 */
	public void initClique() { this.m_EstCliquee = false; }
	
	/**
	 * Clique sur une case
	 * @return Retourne si la case est min�e, retour = true => fin de partie
	 */
	public boolean clique() { this.m_EstCliquee = true; return this.getEstMinee(); }
	private boolean m_EstCliquee;

	/**
	 * Inverse le marquage de la case
	 * @return Retourne l'�tat du marquage apr�s clic
	 */
	public boolean setMarque() { this.m_EstMarquee = !this.m_EstMarquee; return this.m_EstMarquee;}
	/**
	 * Permet de connaitre l'�tat du marquage de la case
	 * @return Retourne l'�tat de la variable
	 */
	public boolean getMarque() { return this.m_EstMarquee; }
	private boolean m_EstMarquee;

	/**
	 * Permet d'avoir le nombre de mine adjacente � la case
	 */
	public int NombreMineAdjacente = -1;
	@Override public String toString() 
	{
		if(this.m_EstMarquee) return "L";
		return (this.NombreMineAdjacente < 0 ? " " : (this.NombreMineAdjacente == 0 ? "/" : String.valueOf(this.NombreMineAdjacente))); 
	}


	@Override
	public int hashCode()
	{
		final int prime = 31;
		int result = 1;
		result = prime * result + this.NombreMineAdjacente;
		result = prime * result + (this.m_EstCliquee ? 1231:1237);
		result = prime * result + (this.m_EstMarquee ? 1231:1237);
		result = prime * result + (this.m_EstMinee ? 1231:1237);
		return result;
	}

	@Override
	public boolean equals(Object obj)
	{
		if (this == obj) return true;
		if (obj == null) return false;
		if (getClass() != obj.getClass()) return false;
		Case other = (Case)obj;
		if (this.NombreMineAdjacente != other.NombreMineAdjacente) return false;
		if (this.m_EstCliquee != other.m_EstCliquee) return false;
		if (this.m_EstMarquee != other.m_EstMarquee) return false;
		if (this.m_EstMinee != other.m_EstMinee) return false;
		return true;
	}

}
